'''
n!:
(1)使用函数实现
(2)n通过键盘输入
(3)n通过随机数产生
递归函数
（1）递推过程
（2）递归过程
生成器函数(eg.实现1到10之间所有的奇数)
（1）yield
匿名函数
（1）lambda 参数列表：表达式
'''
#库导入
import random

#n!
def fnfac(n):
    t = 1
    for i in range(1,n+1):
        t = t * i

    return t

#递归函数
def fnFacc(x):
    if x == 1:
        return 1
    else:
        t = fnFacc(x-1) * x
        return t

#生成器函数(yield作用为返回，类似return，但是yield执行时程序不停止)
def fun(x):
    while x > 0:
        if x % 2 == 1:
            yield x

        x = x - 1



#主程序
try:
##    n = eval(input("input the number:"))
    
    #通过随机数参数一个数值,闭区间(包含5和10)
    n = random.randint(5,10)
    
    retValue = fnfac(n)
    print("%d!=%d"%(n,retValue))

    #递归函数
    print("%d!=%d"%(n,fnFacc(n)))

    #生成器函数
    gen = fun(10)
    for i in gen:
        print(i)

    #匿名函数
    funLambda = lambda x,y:x+y
    sumValue = funLambda(10,7)
    print("x+y={}".format(sumValue))

except Exception as e:
    print(e)
